iT邦幫忙

2025 iThome 鐵人賽

DAY 23
0

在前面幾天的練習中,我學會了如何用指標修改陣列,也了解了 malloc 的用法
今天要練的這題,可以用來練習用指標操作陣列並計算兩數最大值組合,同時體會函式如何運算後回傳結果,比單純的比較或翻轉更貼近「實際演算法邏輯」。

LeetCode 1464 Maximum Product of Two Elements in an Array題目說明:
給定一個整數陣列 nums,請找出其中兩個不同元素的最大乘積 (nums[i]-1) * (nums[j]-1)。
範例
輸入:nums = [3,4,5,2]
輸出:12
選取 5 與 4 → (5-1)*(4-1) = 12

解題思路:
1️⃣ 用指標遍歷陣列
不是單純使用 nums[i],我們可以透過 *(nums + i) 的寫法,清楚看到指標在記憶體中如何「位移」到每個元素。這能幫助我們理解陣列與指標的關係:在 C 語言中,陣列變數其實就是個指向第一個元素的指標。

2️⃣ 動態追蹤最大值與次大值
題目要求找出 (max1 - 1) * (max2 - 1) 的最大乘積,因此我們不需要排序(那樣反而浪費時間)
我們只要用兩個變數 max1 與 max2,在遍歷過程中動態更新即可
當前值比 max1 大 → 更新 max2 = max1, 再更新 max1 = val
當前值介於兩者之間 → 更新 max2 = val
這樣能在一次迴圈內完成所有比較,時間複雜度只有 O(n)。

3️⃣ 計算最終乘積並回傳
在找出最大值與次大值後,接下來只要根據題意,將這兩個數都減一,然後相乘就能得到最終答案
由於回傳的結果只是單一整數,我們不需要再動態配置記憶體(不像前幾天練習的那些需要回傳新陣列的題目)
但別小看這一步——這題雖然回傳簡單,卻同時讓我實際運用到了「指標存取、條件邏輯判斷、以及變數的即時更新」,是把前幾天學到的指標技巧串起來的一個關鍵環節。
https://ithelp.ithome.com.tw/upload/images/20251007/20169489pck37v3VQY.png


上一篇
用指標練習比大小
下一篇
字串與指標的結合
系列文
用leetcode系統化學習C語言24
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言